package main

import "fmt"

type Transport interface {
	transport()
}

type ApplicationProtocol interface {
	render()
	// Transport 接口嵌套，类似于接口之间的继承
	Transport
}

// HttpProtocol 实现了Transport和ApplicationProtocol定义的方法
// 可以被当作以上两个接口类型使用
type HttpProtocol struct {
}

func (p *HttpProtocol) transport() {
	fmt.Println("use TCP")
}

func (p *HttpProtocol) render() {
	fmt.Println("use HTML")
}

func main() {
	var p ApplicationProtocol
	//将结构体对象指针类型赋值给接口类型变量,之后尽可调用接口中定义与组合接口的方法
	p = &HttpProtocol{}
	p.transport()
	p.render()
}
